﻿#pragma once
#include "afx.h"
#include "MemPool.h"

class CMemPool;

class CMemPoolUnit :
	public CObject
{
public:
	CMemPoolUnit(void) = default;
	~CMemPoolUnit(void) = default;

	void Init(int poolID, int blockID, CMemPool * pPool);

protected:
	struct UnitHeader
	{
		int		poolID; //当前单元所属的内存池ID
		int		blockID; //当前单元所属的内存块ID
		CMemPool	* pPool; //所属的内存池
		char	* pBuf;		//指向当前内存单元所hold的原始内存
	};
	UnitHeader	m_header;

public:

	int GetBlockID() const
	{
		return m_header.blockID;
	}
	//释放当前对象占用的堆内存单元。
	//实际并不是删除回收内存空间，而是将其重新放入空闲队列进行复用。
	void Free();
};
